package bean.dao;

import java.util.List;

import hbt.HibernateUtil;

import org.hibernate.*;
import bean.ListaDePrecios;
import bean.Proveedor;

public class ListaDePreciosDAO {
	private static ListaDePreciosDAO instancia = null;
	private static SessionFactory sf = null;

	public static ListaDePreciosDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new ListaDePreciosDAO();
		} 
		return instancia;
	}
	
	/*LEE EL XML (LO REALIZA EL XMLDAO) Y CARGA LA LISTA DE PRECIOS EN LA BASE*/
	public void cargarListaDePrecios(String archivo){
			ListaDePrecios lista;
			try {
				lista = XmlDAO.getInstancia().cargarListaDePrecios(archivo);
				Proveedor proveedor = ProveedorDAO.getInstancia().buscarProveedor (lista.getProveedor().getCuil());
				Session session = sf.openSession();
				session.beginTransaction();
				if (proveedor==null){
					System.out.println ("Primero debe ingresar un proveedor");					
				}
				else{
					lista.setProveedor(proveedor);
				}
				session.persist(lista);
				for (int i =0; i<lista.getItems().size();i++){
					session.persist(lista.getItems().get(i).getProducto());
					session.persist(lista.getItems().get(i));
				}
				session.flush();
				session.getTransaction().commit();
				session.close();
			} catch (Exception e) {
				System.out.println (e.toString());
			}
	}
	
	@SuppressWarnings("unchecked")
	public List <Object[]> comparativaDePrecios(){
		Session session = sf.openSession();
		session.beginTransaction();
		List <Object[]> lista = session.createQuery("select i.producto.idProducto.nroSerie, i.producto.idProducto.sufijo,p.razonSocial,i.precioUnitario from Item_ListaPrecios i, ListaDePrecios lp, Proveedor p where (lp.idLista.numero = i.lista.idLista.numero) and (p.cuil = lp.proveedor.cuil) order by (i.producto.idProducto.nroSerie)").list();
		session.flush();
		session.getTransaction().commit();
		session.close();
		return lista;		
	}
	
	@SuppressWarnings("unchecked")
	public List <Object[]> comparativaDePreciosSolCot(int numSol){
		Session session = sf.openSession();
		session.beginTransaction();
		Query query= session.createQuery("select i.producto.idProducto.nroSerie, i.producto.idProducto.sufijo,p.razonSocial,i.precioUnitario from Item_SolicitudCliente isc, Item_ListaPrecios i, ListaDePrecios lp, Proveedor p, SolicitudDeCotizacion sc where (sc.id.numero=:numSol) and (isc.producto.idProducto.nroSerie = i.producto.idProducto.nroSerie) and (sc.id.numero = isc.solicitud.id.numero) and (lp.idLista.numero = i.lista.idLista.numero) and (p.cuil = lp.proveedor.cuil) order by (i.producto.idProducto.nroSerie)");
		query.setParameter("numSol", numSol);
		List <Object[]> lista = query.list();
		session.flush();
		session.getTransaction().commit();
		session.close();
		return lista;		
	}
	
}
